/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * RetornoInversionJInternalFrame.java
 *
 * Created on 22-may-2010, 11:46:22
 */
package jepi.ui;

import db.MySQLManager;
import java.awt.Dimension;
import java.beans.PropertyVetoException;
import java.sql.SQLException;
import javax.swing.JDesktopPane;
import javax.swing.table.DefaultTableModel;
import jepi.CostoBeneficioProyecto;
import jepi.Grafico;
import jepi.Proyecto;

/**
 *
 * @author liz
 */
public class RetornoInversionJInternalFrame extends javax.swing.JInternalFrame {

    private Proyecto proyectoActual;
    String conclucion;

    /** Creates new form RetornoInversionJInternalFrame */
    public RetornoInversionJInternalFrame() {
        initComponents();

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jTextField1 = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jPanel2 = new javax.swing.JPanel();
        jPanel3 = new javax.swing.JPanel();
        seleccionarButton = new javax.swing.JToggleButton();
        jButton1 = new javax.swing.JButton();

        setClosable(true);
        setIconifiable(true);
        setMaximizable(true);
        setResizable(true);
        setTitle("Analisis de Flujo de Efectivo");

        jTextField1.setEditable(false);

        jLabel1.setText("Proyecto en evaluacion:");

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null},
                {null, null}
            },
            new String [] {
                "Rubro", "Periodo"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 643, Short.MAX_VALUE)
                    .addComponent(jLabel3, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 643, Short.MAX_VALUE)
                    .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 643, Short.MAX_VALUE)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(102, 102, 102))
        );

        jTabbedPane1.addTab("Proyecto en evaluacion", jPanel1);

        jPanel2.setLayout(new java.awt.BorderLayout());
        jTabbedPane1.addTab("Modelo grafico", jPanel2);

        jPanel3.setLayout(new java.awt.BorderLayout());
        jTabbedPane1.addTab("Magnitud flujos y beneficios", jPanel3);

        seleccionarButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/create.png"))); // NOI18N
        seleccionarButton.setText("Seleccionar Proyectos");
        seleccionarButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        seleccionarButton.setFocusable(false);
        seleccionarButton.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        seleccionarButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                seleccionarButtonActionPerformed(evt);
            }
        });

        jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/abrir.png"))); // NOI18N
        jButton1.setText("Reporte");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 668, Short.MAX_VALUE)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(seleccionarButton)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(seleccionarButton)
                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jTabbedPane1)
                .addContainerGap())
        );

        jTabbedPane1.getAccessibleContext().setAccessibleName("Proyecto en Evaluacion");

        pack();
    }// </editor-fold>//GEN-END:initComponents

    public void setProyectoActual(Proyecto proyectoActual) {
        this.proyectoActual = proyectoActual;

        jTextField1.setText(proyectoActual.getNombre());
        actualizarTabla();
        //actualizarTabla(false);
    }

    public void actualizarTabla() {

        CostoBeneficioProyecto costobeneficio = new CostoBeneficioProyecto();
        float[] costo = null;
        float[] beneficio = null;
        float[] flujo = null;
        float[] acumulado = null;

        costo = costobeneficio.obtenerCostos(proyectoActual.getIdProyecto());
        beneficio = costobeneficio.obtenerBeneficios(proyectoActual.getIdProyecto());
        flujo = costobeneficio.obtenerBeneficios(proyectoActual.getIdProyecto());
        acumulado = costobeneficio.obtenerBeneficios(proyectoActual.getIdProyecto());

        int cambio_flujo = -1;
        int cambio_acumulado = -1;
        for (int i = 0; i < proyectoActual.getVidaEconomica(); i++) {
            flujo[i] = beneficio[i] - costo[i];
            if (i == 0) {
                acumulado[i] = flujo[i];
            } else {
                acumulado[i] = acumulado[i - 1] + flujo[i];
            }
        }
        int c = 0;
        while (c < proyectoActual.getVidaEconomica() && cambio_flujo == -1) {
            if (flujo[c] > 0) {
                cambio_flujo = c;
            }
            c++;
        }
        if (cambio_flujo != -1) {
            jLabel2.setText("<html><font color='Blue' size='4'><b>Se obtienen utlidades a partir del " + (cambio_flujo + 1) + " periodo.</b></font></html>");
            conclucion="Se obtienen utlidades a partir del " + (cambio_flujo + 1) + " periodo.";
        } else {
            jLabel2.setText("<html><font color='Red' size='4'><b>Para el proyecto en evaluacion, NO se perciben utilidades en el flujo de efectivo.</b></font></html>");
            conclucion="Para el proyecto en evaluacion, NO se perciben utilidades en el flujo de efectivo.";
        }

        c = 0;
        while (c < proyectoActual.getVidaEconomica() && cambio_acumulado == -1) {
            if (acumulado[c] > 0) {
                cambio_acumulado = c;
            }
            c++;
        }
        if (cambio_acumulado != -1) {
            jLabel3.setText("<html><font color='Blue' size='4'><b>La utilidad supera la inversion inicial en el " + (cambio_acumulado + 1) + " periodo.</b></font></html>");
            conclucion+="\nLa utilidad supera la inversion inicial en el " + (cambio_acumulado + 1) + " periodo.";
        } else {
            jLabel3.setText("<html><font color='Red' size='4'><b>Para el proyecto en evaluacion, No se proyecta un retorno sobre la inversion</b></font></html>");
            conclucion+="\nPara el proyecto en evaluacion, No se proyecta un retorno sobre la inversion";
        }

        Object[][] datos = new Object[4][proyectoActual.getVidaEconomica() + 1];
        Object cols[] = new String[proyectoActual.getVidaEconomica() + 1];

        int ncostos = 1;

        try {
            String unidadTiempo = MySQLManager.ejecutarConsultaSelect("select cut.descripcion as descrip from proyecto p "
                    + "inner join catalogo_unidad_tiempo cut on p.id_unidad_tiempo=cut.id_unidad_tiempo "
                    + "where p.id_proyecto=" + proyectoActual.getIdProyecto(), true).getString("descrip");


            datos[0][0] = "Costo";
            datos[1][0] = "Beneficio";
            datos[2][0] = "Flujo";
            datos[3][0] = "Flujo Acumulado";
            cols[0] = "Rubro";

            for (int i = 0; i < ncostos; i++) {

                for (int j = 0; j < proyectoActual.getVidaEconomica(); j++) {
                    cols[j + 1] = unidadTiempo + " " + (j + 1);
                    datos[i][j + 1] = costo[j];
                    datos[i + 1][j + 1] = beneficio[j];
                    datos[i + 2][j + 1] = flujo[j];
                    datos[i + 3][j + 1] = acumulado[j];

                }
            }

            jTable1.setModel(new DefaultTableModel(datos, cols));
        } catch (SQLException ex) {
            System.out.println(ex);
        }

        Grafico migrafico = new Grafico();
        Dimension d = jPanel2.getSize();
        jPanel2.removeAll();
        jPanel2.add(migrafico.crear_grafico_de_flujos(d, flujo, acumulado, proyectoActual.getVidaEconomica()));


        this.repaint();
        jPanel3.removeAll();
        jPanel3.add(migrafico.crear_grafico_costo_beneficio(d, costo, beneficio, proyectoActual.getVidaEconomica()));

        this.repaint();

    }

    private void seleccionarMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
        proyectoActual = new Proyecto();

        BuscarProyectoJDialog bpd = new BuscarProyectoJDialog(null, true);
        bpd.setVisible(true);
        if (bpd.getReturnStatus() == BuscarProyectoJDialog.RET_OK) {
            proyectoActual = bpd.getProyectoSeleccionado();

            setProyectoActual(bpd.getProyectoSeleccionado());
        }

    }

    private void seleccionarButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_seleccionarButtonActionPerformed
        seleccionarMenuItemActionPerformed(null);
    }//GEN-LAST:event_seleccionarButtonActionPerformed

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
        setProyectoActual(proyectoActual);
        try {
            JDesktopPane m = (JDesktopPane) this.getParent();
            ReporteFEJInternalFrame internalFrame = new ReporteFEJInternalFrame(proyectoActual.getIdProyecto(), conclucion);
            internalFrame.setVisible(true);
            m.add(internalFrame, javax.swing.JLayeredPane.DEFAULT_LAYER);
            internalFrame.setMaximum(false);
            internalFrame.setSelected(true);
        } catch (PropertyVetoException ex) {
            System.out.println(ex);
        }
    }//GEN-LAST:event_jButton1ActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanel3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JToggleButton seleccionarButton;
    // End of variables declaration//GEN-END:variables
    private javax.swing.JLabel jGrafica;
}
